package vip.websky.project.common.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间工具类
 *
 * @author: YangYong
 * @TIME 2017/6/15-17:32
 */

/**
 * <ul>
 * <li>1.获取格式化的当前时间</li>
 * <li>2.将毫秒时间转换成规定格式</li>
 * <li>3.获取当前时间</li>
 * <li>4.获取格式化的当前时间</li>
 * <li>5.获取yyyyMMddHHmmss格式的当前时间</li>
 * <li>6.获取格式化的指定时间</li>
 * <li>7.获取当天初始时间</li>
 * <li>8.获取当天终止时间</li>
 * <li>9.两个时间相差时间</li>
 * </ul>
 */
public class DateUtils {
    public static final String DATETIME_24_LONG = "yyyyMMddHHmmss";
    public static final String DATETIME_12_LONG = "yyyyMMddhhmmss";
    public static final String DATETIME_24_SLASH = "yyyy/MM/dd/HH/mm/ss";
    public static final String DATETIME_24_MS = "yyyyMMddHHmmssSSS";
    public static final String DATETIME_24_YMD_CH = "yyyy年MM月dd日 HH时mm分ss秒";
    public static final String DATETIME_24_LINE = "yyyy-MM-dd HH:mm:ss";
    public static final String DATETIME_12_LINE = "yyyy-MM-dd hh:mm:ss";
    public static final String DATETIME_DATE = "yyyyMMdd";
    public static final String DATETIME_TIME = "HHmmss";
    public static final String DATETIME_SIMPLE_MS = "yyyy-MM-dd HH:mm:ss.SSS" ;

    public static final String DAY_TIME_END = "235959";
    public static final String DAY_TIME_BEGIN = "000000";


    /**
     * 1.获取格式化的当前时间
     * @param dateFormat 时间格式 有枚举类已定义
     * @return String
     */
    public  static String getCurrentTimeFormat(String dateFormat){
        DateFormat df=new SimpleDateFormat(dateFormat);
        return df.format(getCurrentTime());
    }

    /**
     * 2.将毫秒时间转换成规定格式
     * @param currentTimeMillis 毫秒级时间
     * @param dateFormat 时间格式 有枚举类已定义d
     * @return String
     */
    public  static String getTimeFormat(long currentTimeMillis,String dateFormat){
        DateFormat df=new SimpleDateFormat(dateFormat);
        return df.format(currentTimeMillis);
    }

    /**
     * 3.获取当前时间
     * @return long 当前时间
     */
    public static long getCurrentTime(){
        return System.currentTimeMillis();
    }

    /**
     * 4.获取格式化的当前时间
     * @param dateFormat 时间格式
     * @return 当前时间
     */
    public static String getCurrentTime(String dateFormat){
        DateFormat df=new SimpleDateFormat(dateFormat);
        return df.format(new Date());
    }


    /**
     * 5.获取yyyyMMddHHmmss格式的当前时间
     * @return yyyyMMddHHmmss
     */
    public static String getTimestamp(){
        return getCurrentTimeFormat(DATETIME_24_LONG);
    }

    /**
     * 6.获取格式化的指定时间
     */
    public static String getTime(Date date,String dateFormat){
        DateFormat df=new SimpleDateFormat(dateFormat);
        return df.format(date);
    }

    /**
     * 7.获取当天初始时间
     * @return
     */
    public static Date getStartTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR_OF_DAY, 0);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime();
    }

    /**
     * 8.获取当天终止时间
     * @return
     */
    public static Date getEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR_OF_DAY, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        return todayEnd.getTime();
    }

    /**
     * 9.两个时间相差时间
     * @param startTime 时间参数 1 格式：1990-01-01 12:00:00
     * @param endTime 时间参数 2 格式：2009-01-01 12:00:00
     * @return String 返回值为：-1 小于；0 等于；1大于
     */
    public static int getCompareTo(String startTime, String endTime) throws ParseException {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dateTime1 = dateFormat.parse(startTime);
        Date dateTime2 = dateFormat.parse(endTime);
        return dateTime1.compareTo(dateTime2);
    }


    public static void main (String [] args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(getStartTime()));
        System.out.println(sdf.format(getEndTime()));
    }
}
